#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <strings.h>
#include <time.h>

// 写一条日志
void write_log_msg(char *msg)
{
    // 2. 打开管道文件, 日志文件
    int fifo_fd = open("/tmp/logfifo", O_RDWR);
    if(fifo_fd < 0) {
        perror("日志管道文件打开失败\n");
        exit(0);
    }

    // 3. 把产生的日志写入管道
    char buf[1024];
    time_t t;
    bzero(buf, 1024);

    time(&t);
    snprintf(buf, 1024, "[%-6d]  %s  %s", getpid(), msg, ctime(&t)); // ctime转换出当前的时间字串，自带换行
    write(fifo_fd, buf, strlen(buf));

    // 4. 关闭文件
    close(fifo_fd);
}


int main(int argc, char *argv[])
{
#if 1    
    // 1. 检查管道是否存在，不存在创建
    if( access("/tmp/logfifo", F_OK) )
        mkfifo("/tmp/logfifo", 0666);

    // 2. 打开管道文件, 日志文件
    int fifo_fd = open("/tmp/logfifo", O_RDWR);
    if(fifo_fd < 0) 
    {
        perror("日志管道文件打开失败\n");
        return 0;
    }

    // 3. 把产生的日志写入管道
    char buf[1024];
    time_t t;
    while(1)
    {
        bzero(buf, 1024);

        time(&t);
        snprintf(buf, 1024, "[%-6d]  %s", getpid(), ctime(&t)); // ctime转换出当前的时间字串，自带换行
        write(fifo_fd, buf, strlen(buf));
        sleep(1);
    }

    // 4. 关闭文件
    close(fifo_fd);
#endif
#if 0
    write_log_msg(argv[1]);
#endif
    return 0;
}